package unidadeControle;

import excecao.ExcecaoMemoriaControle;

class MemoriaControle {
	
	private static final int TOT_MICRO_INSTRUCOES = 191;
	private static MemoriaControle instancia = null;
	public static MicroInstrucao[] microInstrucoes;
	
	private MemoriaControle(){
		microInstrucoes = new MicroInstrucao[TOT_MICRO_INSTRUCOES];
		
		carregaMicroInstrucoes();
	}
	
	public static void criaInstancia(){
		if (instancia == null){
			instancia = new MemoriaControle();
		}
	}
	
	public static MemoriaControle getInstancia(){
		return instancia;
	}	
	
	private void carregaMicroInstrucoes(){
		microInstrucoes[1] = new MicroInstrucao("A <- F ", "00000000000001111000000", "00000000000001111000000", "00000100000001111000000");
		microInstrucoes[2] = new MicroInstrucao("A <- R0 ", "00000000000000000010000", "00000000000000000010000", "00000100000000000010000");
		microInstrucoes[3] = new MicroInstrucao("A <- R1 ", "00000000000000001000000", "00000000000000001000000", "00000100000000001000000");
		microInstrucoes[4] = new MicroInstrucao("A <- R2 ", "00000000000000001000010", "00000000000000001000010", "00000100000000001000010");
		microInstrucoes[5] = new MicroInstrucao("A <- R3 ", "00000000000000001000100", "00000000000000001000100", "00000100000000001000100");
		microInstrucoes[6] = new MicroInstrucao("A <- R4 ", "00000000000000001000110", "00000000000000001000110", "00000100000000001000110");
		microInstrucoes[7] = new MicroInstrucao("A <- clr A ", "00000000000001100001000", "00000000000001100001000", "00000100000001100001000");
		microInstrucoes[8] = new MicroInstrucao("A <- dec A ", "00000000000000101001000", "00000000000000101001000", "00000100000000101001000");
		microInstrucoes[9] = new MicroInstrucao("A <- inc A ", "00000000000000010001000", "00000000000000010001000", "00000100000000010001000");
		microInstrucoes[10] = new MicroInstrucao("A <- neg A ", "00000000000001011001000", "00000000000001011001000", "00000100000001011001000");
		microInstrucoes[11] = new MicroInstrucao("A <- not A ", "00000000000001010001000", "00000000000001010001000", "00000100000001010001000");
		microInstrucoes[12] = new MicroInstrucao("A <- shl A ", "00000000000001101001000", "00000000000001101001000", "00000100000001101001000");
		microInstrucoes[13] = new MicroInstrucao("A <- shr A ", "00000000000001110001000", "00000000000001110001000", "00000100000001110001000");
		microInstrucoes[14] = new MicroInstrucao("F <- A ", "00000000000000000001000", "00000000000000000001000", "00000000000100000001000");
		microInstrucoes[15] = new MicroInstrucao("F <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00000000000100000000000");
		microInstrucoes[16] = new MicroInstrucao("PC <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00000010000000000000000");
		microInstrucoes[17] = new MicroInstrucao("PC <- incf PC ", "00000000000000011011000", "00000000000000011011000", "00000010000000011011000");
		microInstrucoes[18] = new MicroInstrucao("R0 <- A ", "00000000000000000001000", "00000000000000000001000", "10000000000000000001000");
		microInstrucoes[19] = new MicroInstrucao("R0 <- R0 ", "00000000000000000010000", "00000000000000000010000", "10000000000000000010000");
		microInstrucoes[20] = new MicroInstrucao("R0 <- R0 + R1 ", "00000000000000100010000", "00000000000000100010000", "10000000000000100010000");
		microInstrucoes[21] = new MicroInstrucao("R0 <- R0 + R2 ", "00000000000000100010010", "00000000000000100010010", "10000000000000100010010");
		microInstrucoes[22] = new MicroInstrucao("R0 <- R0 + R3 ", "00000000000000100010100", "00000000000000100010100", "10000000000000100010100");
		microInstrucoes[23] = new MicroInstrucao("R0 <- R0 + R4 ", "00000000000000100010110", "00000000000000100010110", "10000000000000100010110");
		microInstrucoes[24] = new MicroInstrucao("R0 <- R0 - R1 ", "00000000000000111010000", "00000000000000111010000", "10000000000000111010000");
		microInstrucoes[25] = new MicroInstrucao("R0 <- R0 - R2 ", "00000000000000111010010", "00000000000000111010010", "10000000000000111010010");
		microInstrucoes[26] = new MicroInstrucao("R0 <- R0 - R3 ", "00000000000000111010100", "00000000000000111010100", "10000000000000111010100");
		microInstrucoes[27] = new MicroInstrucao("R0 <- R0 - R4 ", "00000000000000111010110", "00000000000000111010110", "10000000000000111010110");
		microInstrucoes[28] = new MicroInstrucao("R0 <- R0 and R1 ", "00000000000001000010000", "00000000000001000010000", "10000000000001000010000");
		microInstrucoes[29] = new MicroInstrucao("R0 <- R0 and R2 ", "00000000000001000010010", "00000000000001000010010", "10000000000001000010010");
		microInstrucoes[30] = new MicroInstrucao("R0 <- R0 and R3 ", "00000000000001000010100", "00000000000001000010100", "10000000000001000010100");
		microInstrucoes[31] = new MicroInstrucao("R0 <- R0 and R4 ", "00000000000001000010110", "00000000000001000010110", "10000000000001000010110");
		microInstrucoes[32] = new MicroInstrucao("R0 <- R0 or R1 ", "00000000000001001010000", "00000000000001001010000", "10000000000001001010000");
		microInstrucoes[33] = new MicroInstrucao("R0 <- R0 or R2 ", "00000000000001001010010", "00000000000001001010010", "10000000000001001010010");
		microInstrucoes[34] = new MicroInstrucao("R0 <- R0 or R3 ", "00000000000001001010100", "00000000000001001010100", "10000000000001001010100");
		microInstrucoes[35] = new MicroInstrucao("R0 <- R0 or R4 ", "00000000000001001010110", "00000000000001001010110", "10000000000001001010110");
		microInstrucoes[36] = new MicroInstrucao("R0 <- R1 ", "00000000000000001000000", "00000000000000001000000", "10000000000000001000000");
		microInstrucoes[37] = new MicroInstrucao("R0 <- R2 ", "00000000000000001000010", "00000000000000001000010", "10000000000000001000010");
		microInstrucoes[38] = new MicroInstrucao("R0 <- R3 ", "00000000000000001000100", "00000000000000001000100", "10000000000000001000100");
		microInstrucoes[39] = new MicroInstrucao("R0 <- R4 ", "00000000000000001000110", "00000000000000001000110", "10000000000000001000110");
		microInstrucoes[40] = new MicroInstrucao("R0 <- Rdados ", "00000000000000000000000", "00000000000000000000000", "10000000000000000000000");
		microInstrucoes[41] = new MicroInstrucao("R0 <- clr R0 ", "00000000000001100010000", "00000000000001100010000", "10000000000001100010000");
		microInstrucoes[42] = new MicroInstrucao("R0 <- dec R0 ", "00000000000000101010000", "00000000000000101010000", "10000000000000101010000");
		microInstrucoes[43] = new MicroInstrucao("R0 <- inc R0 ", "00000000000000010010000", "00000000000000010010000", "10000000000000010010000");
		microInstrucoes[44] = new MicroInstrucao("R0 <- neg R0 ", "00000000000001011010000", "00000000000001011010000", "10000000000001011010000");
		microInstrucoes[45] = new MicroInstrucao("R0 <- not R0 ", "00000000000001010010000", "00000000000001010010000", "10000000000001010010000");
		microInstrucoes[46] = new MicroInstrucao("R0 <- shl R0 ", "00000000000001101010000", "00000000000001101010000", "10000000000001101010000");
		microInstrucoes[47] = new MicroInstrucao("R0 <- shr R0 ", "00000000000001110010000", "00000000000001110010000", "10000000000001110010000");
		microInstrucoes[48] = new MicroInstrucao("R1 <- A ", "00000000000000000001000", "00000000000000000001000", "01000000000000000001000");
		microInstrucoes[49] = new MicroInstrucao("R1 <- A + R1 ", "00000000000000100001000", "00000000000000100001000", "01000000000000100001000");
		microInstrucoes[50] = new MicroInstrucao("R1 <- A - R1 ", "00000000000000111001000", "00000000000000111001000", "01000000000000111001000");
		microInstrucoes[51] = new MicroInstrucao("R1 <- A - R2 ", "00000000000000111001010", "00000000000000111001010", "01000000000000111001010");
		microInstrucoes[52] = new MicroInstrucao("R1 <- A - R3 ", "00000000000000111001100", "00000000000000111001100", "01000000000000111001100");
		microInstrucoes[53] = new MicroInstrucao("R1 <- A - R4 ", "00000000000000111001110", "00000000000000111001110", "01000000000000111001110");
		microInstrucoes[54] = new MicroInstrucao("R1 <- A and R1 ", "00000000000001000001000", "00000000000001000001000", "01000000000001000001000");
		microInstrucoes[55] = new MicroInstrucao("R1 <- A or R1 ", "00000000000001001001000", "00000000000001001001000", "01000000000001001001000");
		microInstrucoes[56] = new MicroInstrucao("R1 <- R0 ", "00000000000000000010000", "00000000000000000010000", "01000000000000000010000");
		microInstrucoes[57] = new MicroInstrucao("R1 <- R0 + R1 ", "00000000000000100010000", "00000000000000100010000", "01000000000000100010000");
		microInstrucoes[58] = new MicroInstrucao("R1 <- R0 and R1 ", "00000000000001000010000", "00000000000001000010000", "01000000000001000010000");
		microInstrucoes[59] = new MicroInstrucao("R1 <- R0 or R1 ", "00000000000001001010000", "00000000000001001010000", "01000000000001001010000");
		microInstrucoes[60] = new MicroInstrucao("R1 <- R1 ", "00000000000000001000000", "00000000000000001000000", "01000000000000001000000");
		microInstrucoes[61] = new MicroInstrucao("R1 <- R2 ", "00000000000000001000010", "00000000000000001000010", "01000000000000001000010");
		microInstrucoes[62] = new MicroInstrucao("R1 <- R3 ", "00000000000000001000100", "00000000000000001000100", "01000000000000001000100");
		microInstrucoes[63] = new MicroInstrucao("R1 <- R4 ", "00000000000000001000110", "00000000000000001000110", "01000000000000001000110");
		microInstrucoes[64] = new MicroInstrucao("R1 <- Rdados ", "00000000000000000000000", "00000000000000000000000", "01000000000000000000000");
		microInstrucoes[65] = new MicroInstrucao("R1 <- Rdados + R1 ", "00000000000000100000000", "00000000000000100000000", "01000000000000100000000");
		microInstrucoes[66] = new MicroInstrucao("R1 <- Rdados and R1 ", "00000000000001000000000", "00000000000001000000000", "01000000000001000000000");
		microInstrucoes[67] = new MicroInstrucao("R1 <- Rdados or R1 ", "00000000000001001000000", "00000000000001001000000", "01000000000001001000000");
		microInstrucoes[68] = new MicroInstrucao("R2 <- A ", "00000000000000000001000", "00000000000000000001000", "00100000000000000001000");
		microInstrucoes[69] = new MicroInstrucao("R2 <- A + R2 ", "00000000000000100001010", "00000000000000100001010", "00100000000000100001010");
		microInstrucoes[70] = new MicroInstrucao("R2 <- A - R1 ", "00000000000000111001000", "00000000000000111001000", "00100000000000111001000");
		microInstrucoes[71] = new MicroInstrucao("R2 <- A - R2 ", "00000000000000111001010", "00000000000000111001010", "00100000000000111001010");
		microInstrucoes[72] = new MicroInstrucao("R2 <- A - R3 ", "00000000000000111001100", "00000000000000111001100", "00100000000000111001100");
		microInstrucoes[73] = new MicroInstrucao("R2 <- A - R4 ", "00000000000000111001110", "00000000000000111001110", "00100000000000111001110");
		microInstrucoes[74] = new MicroInstrucao("R2 <- A and R2 ", "00000000000001000001010", "00000000000001000001010", "00100000000001000001010");
		microInstrucoes[75] = new MicroInstrucao("R2 <- A or R2 ", "00000000000001001001010", "00000000000001001001010", "00100000000001001001010");
		microInstrucoes[76] = new MicroInstrucao("R2 <- R0 ", "00000000000000000010000", "00000000000000000010000", "00100000000000000010000");
		microInstrucoes[77] = new MicroInstrucao("R2 <- R0 + R2 ", "00000000000000100010010", "00000000000000100010010", "00100000000000100010010");
		microInstrucoes[78] = new MicroInstrucao("R2 <- R0 and R2 ", "00000000000001000010010", "00000000000001000010010", "00100000000001000010010");
		microInstrucoes[79] = new MicroInstrucao("R2 <- R0 or R2 ", "00000000000001001010010", "00000000000001001010010", "00100000000001001010010");
		microInstrucoes[80] = new MicroInstrucao("R2 <- R1 ", "00000000000000001000000", "00000000000000001000000", "00100000000000001000000");
		microInstrucoes[81] = new MicroInstrucao("R2 <- R2 ", "00000000000000001000010", "00000000000000001000010", "00100000000000001000010");
		microInstrucoes[82] = new MicroInstrucao("R2 <- R3 ", "00000000000000001000100", "00000000000000001000100", "00100000000000001000100");
		microInstrucoes[83] = new MicroInstrucao("R2 <- R4 ", "00000000000000001000110", "00000000000000001000110", "00100000000000001000110");
		microInstrucoes[84] = new MicroInstrucao("R2 <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00100000000000000000000");
		microInstrucoes[85] = new MicroInstrucao("R2 <- Rdados + R2 ", "00000000000000100000010", "00000000000000100000010", "00100000000000100000010");
		microInstrucoes[86] = new MicroInstrucao("R2 <- Rdados and R2 ", "00000000000001000000010", "00000000000001000000010", "00100000000001000000010");
		microInstrucoes[87] = new MicroInstrucao("R2 <- Rdados or R2 ", "00000000000001001000010", "00000000000001001000010", "00100000000001001000010");
		microInstrucoes[88] = new MicroInstrucao("R3 <- A ", "00000000000000000001000", "00000000000000000001000", "00010000000000000001000");
		microInstrucoes[89] = new MicroInstrucao("R3 <- A + R3 ", "00000000000000100001100", "00000000000000100001100", "00010000000000100001100");
		microInstrucoes[90] = new MicroInstrucao("R3 <- A - R1 ", "00000000000000111001000", "00000000000000111001000", "00010000000000111001000");
		microInstrucoes[91] = new MicroInstrucao("R3 <- A - R2 ", "00000000000000111001010", "00000000000000111001010", "00010000000000111001010");
		microInstrucoes[92] = new MicroInstrucao("R3 <- A - R3 ", "00000000000000111001100", "00000000000000111001100", "00010000000000111001100");
		microInstrucoes[93] = new MicroInstrucao("R3 <- A - R4 ", "00000000000000111001110", "00000000000000111001110", "00010000000000111001110");
		microInstrucoes[94] = new MicroInstrucao("R3 <- A and R3 ", "00000000000001000001100", "00000000000001000001100", "00010000000001000001100");
		microInstrucoes[95] = new MicroInstrucao("R3 <- A or R3 ", "00000000000001001001100", "00000000000001001001100", "00010000000001001001100");
		microInstrucoes[96] = new MicroInstrucao("R3 <- R0 ", "00000000000000000010000", "00000000000000000010000", "00010000000000000010000");
		microInstrucoes[97] = new MicroInstrucao("R3 <- R0 + R3 ", "00000000000000100010100", "00000000000000100010100", "00010000000000100010100");
		microInstrucoes[98] = new MicroInstrucao("R3 <- R0 and R3 ", "00000000000001000010100", "00000000000001000010100", "00010000000001000010100");
		microInstrucoes[99] = new MicroInstrucao("R3 <- R0 or R3 ", "00000000000001001010100", "00000000000001001010100", "00010000000001001010100");
		microInstrucoes[100] = new MicroInstrucao("R3 <- R1 ", "00000000000000001000000", "00000000000000001000000", "00010000000000001000000");
		microInstrucoes[101] = new MicroInstrucao("R3 <- R2 ", "00000000000000001000010", "00000000000000001000010", "00010000000000001000010");
		microInstrucoes[102] = new MicroInstrucao("R3 <- R3 ", "00000000000000001000100", "00000000000000001000100", "00010000000000001000100");
		microInstrucoes[103] = new MicroInstrucao("R3 <- R4 ", "00000000000000001000110", "00000000000000001000110", "00010000000000001000110");
		microInstrucoes[104] = new MicroInstrucao("R3 <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00010000000000000000000");
		microInstrucoes[105] = new MicroInstrucao("R3 <- Rdados + R3 ", "00000000000000100000100", "00000000000000100000100", "00010000000000100000100");
		microInstrucoes[106] = new MicroInstrucao("R3 <- Rdados and R3 ", "00000000000001000000100", "00000000000001000000100", "00010000000001000000100");
		microInstrucoes[107] = new MicroInstrucao("R3 <- Rdados or R3 ", "00000000000001001000100", "00000000000001001000100", "00010000000001001000100");
		microInstrucoes[108] = new MicroInstrucao("R4 <- A ", "00000000000000000001000", "00000000000000000001000", "00001000000000000001000");
		microInstrucoes[109] = new MicroInstrucao("R4 <- A + R4 ", "00000000000000100001110", "00000000000000100001110", "00001000000000100001110");
		microInstrucoes[110] = new MicroInstrucao("R4 <- A - R1 ", "00000000000000111001000", "00000000000000111001000", "00001000000000111001000");
		microInstrucoes[111] = new MicroInstrucao("R4 <- A - R2 ", "00000000000000111001010", "00000000000000111001010", "00001000000000111001010");
		microInstrucoes[112] = new MicroInstrucao("R4 <- A - R3 ", "00000000000000111001100", "00000000000000111001100", "00001000000000111001100");
		microInstrucoes[113] = new MicroInstrucao("R4 <- A - R4 ", "00000000000000111001110", "00000000000000111001110", "00001000000000111001110");
		microInstrucoes[114] = new MicroInstrucao("R4 <- A and R4 ", "00000000000001000001110", "00000000000001000001110", "00001000000001000001110");
		microInstrucoes[115] = new MicroInstrucao("R4 <- A or R4 ", "00000000000001001001110", "00000000000001001001110", "00001000000001001001110");
		microInstrucoes[116] = new MicroInstrucao("R4 <- R0 ", "00000000000000000010000", "00000000000000000010000", "00001000000000000010000");
		microInstrucoes[117] = new MicroInstrucao("R4 <- R0 + R4 ", "00000000000000100010110", "00000000000000100010110", "00001000000000100010110");
		microInstrucoes[118] = new MicroInstrucao("R4 <- R0 and R4 ", "00000000000001000010110", "00000000000001000010110", "00001000000001000010110");
		microInstrucoes[119] = new MicroInstrucao("R4 <- R0 or R4 ", "00000000000001001010110", "00000000000001001010110", "00001000000001001010110");
		microInstrucoes[120] = new MicroInstrucao("R4 <- R1 ", "00000000000000001000000", "00000000000000001000000", "00001000000000001000000");
		microInstrucoes[121] = new MicroInstrucao("R4 <- R2 ", "00000000000000001000010", "00000000000000001000010", "00001000000000001000010");
		microInstrucoes[122] = new MicroInstrucao("R4 <- R3 ", "00000000000000001000100", "00000000000000001000100", "00001000000000001000100");
		microInstrucoes[123] = new MicroInstrucao("R4 <- R4 ", "00000000000000001000110", "00000000000000001000110", "00001000000000001000110");
		microInstrucoes[124] = new MicroInstrucao("R4 <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00001000000000000000000");
		microInstrucoes[125] = new MicroInstrucao("R4 <- Rdados + R4 ", "00000000000000100000110", "00000000000000100000110", "00001000000000100000110");
		microInstrucoes[126] = new MicroInstrucao("R4 <- Rdados and R4 ", "00000000000001000000110", "00000000000001000000110", "00001000000001000000110");
		microInstrucoes[127] = new MicroInstrucao("R4 <- Rdados or R4 ", "00000000000001001000110", "00000000000001001000110", "00001000000001001000110");
		microInstrucoes[128] = new MicroInstrucao("Rdados <- A ", "00000000000000000001001", "00000000000000000001001", "00000000010000000001001");
		microInstrucoes[129] = new MicroInstrucao("Rdados <- F ", "00000000000001111000001", "00000000000001111000001", "00000000010001111000001");
		microInstrucoes[130] = new MicroInstrucao("Rdados <- R0 ", "00000000000000000010001", "00000000000000000010001", "00000000010000000010001");
		microInstrucoes[131] = new MicroInstrucao("Rdados <- R0 + R1 ", "00000000000000100010001", "00000000000000100010001", "00000000010000100010001");
		microInstrucoes[132] = new MicroInstrucao("Rdados <- R0 + R2 ", "00000000000000100010011", "00000000000000100010011", "00000000010000100010011");
		microInstrucoes[133] = new MicroInstrucao("Rdados <- R0 + R3 ", "00000000000000100010101", "00000000000000100010101", "00000000010000100010101");
		microInstrucoes[134] = new MicroInstrucao("Rdados <- R0 + R4 ", "00000000000000100010111", "00000000000000100010111", "00000000010000100010111");
		microInstrucoes[135] = new MicroInstrucao("Rdados <- R0 and R1 ", "00000000000001000010001", "00000000000001000010001", "00000000010001000010001");
		microInstrucoes[136] = new MicroInstrucao("Rdados <- R0 and R2 ", "00000000000001000010011", "00000000000001000010011", "00000000010001000010011");
		microInstrucoes[137] = new MicroInstrucao("Rdados <- R0 and R3 ", "00000000000001000010101", "00000000000001000010101", "00000000010001000010101");
		microInstrucoes[138] = new MicroInstrucao("Rdados <- R0 and R4 ", "00000000000001000010111", "00000000000001000010111", "00000000010001000010111");
		microInstrucoes[139] = new MicroInstrucao("Rdados <- R0 or R1 ", "00000000000001001010001", "00000000000001001010001", "00000000010001001010001");
		microInstrucoes[140] = new MicroInstrucao("Rdados <- R0 or R2 ", "00000000000001001010011", "00000000000001001010011", "00000000010001001010011");
		microInstrucoes[141] = new MicroInstrucao("Rdados <- R0 or R3 ", "00000000000001001010101", "00000000000001001010101", "00000000010001001010101");
		microInstrucoes[142] = new MicroInstrucao("Rdados <- R0 or R4 ", "00000000000001001010111", "00000000000001001010111", "00000000010001001010111");
		microInstrucoes[143] = new MicroInstrucao("Rdados <- R1 ", "00000000000000001000001", "00000000000000001000001", "00000000010000001000001");
		microInstrucoes[144] = new MicroInstrucao("Rdados <- R2 ", "00000000000000001000011", "00000000000000001000011", "00000000010000001000011");
		microInstrucoes[145] = new MicroInstrucao("Rdados <- R3 ", "00000000000000001000101", "00000000000000001000101", "00000000010000001000101");
		microInstrucoes[146] = new MicroInstrucao("Rdados <- R4 ", "00000000000000001000111", "00000000000000001000111", "00000000010000001000111");
		microInstrucoes[147] = new MicroInstrucao("Rdados <- Rdados + R1 ", "00000000000000100000001", "00000000000000100000001", "00000000010000100000001");
		microInstrucoes[148] = new MicroInstrucao("Rdados <- Rdados + R2 ", "00000000000000100000011", "00000000000000100000011", "00000000010000100000011");
		microInstrucoes[149] = new MicroInstrucao("Rdados <- Rdados + R3 ", "00000000000000100000101", "00000000000000100000101", "00000000010000100000101");
		microInstrucoes[150] = new MicroInstrucao("Rdados <- Rdados + R4 ", "00000000000000100000111", "00000000000000100000111", "00000000010000100000111");
		microInstrucoes[151] = new MicroInstrucao("Rdados <- Rdados - R1 ", "00000000000000111000001", "00000000000000111000001", "00000000010000111000001");
		microInstrucoes[152] = new MicroInstrucao("Rdados <- Rdados - R2 ", "00000000000000111000011", "00000000000000111000011", "00000000010000111000011");
		microInstrucoes[153] = new MicroInstrucao("Rdados <- Rdados - R3 ", "00000000000000111000101", "00000000000000111000101", "00000000010000111000101");
		microInstrucoes[154] = new MicroInstrucao("Rdados <- Rdados - R4 ", "00000000000000111000111", "00000000000000111000111", "00000000010000111000111");
		microInstrucoes[155] = new MicroInstrucao("Rdados <- Rdados and R1 ", "00000000000001000000001", "00000000000001000000001", "00000000010001000000001");
		microInstrucoes[156] = new MicroInstrucao("Rdados <- Rdados and R2 ", "00000000000001000000011", "00000000000001000000011", "00000000010001000000011");
		microInstrucoes[157] = new MicroInstrucao("Rdados <- Rdados and R3 ", "00000000000001000000101", "00000000000001000000101", "00000000010001000000101");
		microInstrucoes[158] = new MicroInstrucao("Rdados <- Rdados and R4 ", "00000000000001000000111", "00000000000001000000111", "00000000010001000000111");
		microInstrucoes[159] = new MicroInstrucao("Rdados <- Rdados or R1 ", "00000000000001001000001", "00000000000001001000001", "00000000010001001000001");
		microInstrucoes[160] = new MicroInstrucao("Rdados <- Rdados or R2 ", "00000000000001001000011", "00000000000001001000011", "00000000010001001000011");
		microInstrucoes[161] = new MicroInstrucao("Rdados <- Rdados or R3 ", "00000000000001001000101", "00000000000001001000101", "00000000010001001000101");
		microInstrucoes[162] = new MicroInstrucao("Rdados <- Rdados or R4 ", "00000000000001001000111", "00000000000001001000111", "00000000010001001000111");
		microInstrucoes[163] = new MicroInstrucao("Rdados <- [Rend] ", "00000000000000000000000", "00000000000000000000000", "00000000010000000000000");
		microInstrucoes[164] = new MicroInstrucao("Rdados <- clr Rdados ", "00000000000001100000001", "00000000000001100000001", "00000000010001100000001");
		microInstrucoes[165] = new MicroInstrucao("Rdados <- neg Rdados ", "00000000000001011000001", "00000000000001011000001", "00000000010001011000001");
		microInstrucoes[166] = new MicroInstrucao("Rdados <- not Rdados ", "00000000000001010000001", "00000000000001010000001", "00000000010001010000001");
		microInstrucoes[167] = new MicroInstrucao("Rdados <- shl Rdados ", "00000000000001101000001", "00000000000001101000001", "00000000010001101000001");
		microInstrucoes[168] = new MicroInstrucao("Rdados <- shr Rdados ", "00000000000001110000001", "00000000000001110000001", "00000000010001110000001");
		microInstrucoes[169] = new MicroInstrucao("Rend <- PC ", "00000000000000000011000", "00000000000000000011000", "00000000100000000011000");
		microInstrucoes[170] = new MicroInstrucao("Rend <- R0 ", "00000000000000000010000", "00000000000000000010000", "00000000100000000010000");
		microInstrucoes[171] = new MicroInstrucao("Rend <- R1 ", "00000000000000001000000", "00000000000000001000000", "00000000100000001000000");
		microInstrucoes[172] = new MicroInstrucao("Rend <- R2 ", "00000000000000001000010", "00000000000000001000010", "00000000100000001000010");
		microInstrucoes[173] = new MicroInstrucao("Rend <- R3 ", "00000000000000001000100", "00000000000000001000100", "00000000100000001000100");
		microInstrucoes[174] = new MicroInstrucao("Rend <- R4 ", "00000000000000001000110", "00000000000000001000110", "00000000100000001000110");
		microInstrucoes[175] = new MicroInstrucao("Rend <- SP ", "00000000000000000100000", "00000000000000000100000", "00000000100000000100000");
		microInstrucoes[0] = new MicroInstrucao("Rinst <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00000000001000000000000");
		microInstrucoes[176] = new MicroInstrucao("SP <- decf SP ", "00000000000000110100000", "00000000000000110100000", "00000001000000110100000");
		microInstrucoes[177] = new MicroInstrucao("SP <- incf SP ", "00000000000000011100000", "00000000000000011100000", "00000001000000011100000");
		microInstrucoes[178] = new MicroInstrucao("[Rend] <- Rdados ", "00000000000000000000000", "00000000000000000000000", "00000000000010000000000");
		microInstrucoes[179] = new MicroInstrucao("cmp R1, A ", "00000000000000111001000", "00000000000000111001000", "00000000000000111001000");
		microInstrucoes[180] = new MicroInstrucao("cmp R1, R0 ", "00000000000000111010000", "00000000000000111010000", "00000000000000111010000");
		microInstrucoes[181] = new MicroInstrucao("cmp R1, Rdados ", "00000000000000111000000", "00000000000000111000000", "00000000000000111000000");
		microInstrucoes[182] = new MicroInstrucao("cmp R2, A ", "00000000000000111001010", "00000000000000111001010", "00000000000000111001010");
		microInstrucoes[183] = new MicroInstrucao("cmp R2, R0 ", "00000000000000111010010", "00000000000000111010010", "00000000000000111010010");
		microInstrucoes[184] = new MicroInstrucao("cmp R2, Rdados ", "00000000000000111000010", "00000000000000111000010", "00000000000000111000010");
		microInstrucoes[185] = new MicroInstrucao("cmp R3, A ", "00000000000000111001100", "00000000000000111001100", "00000000000000111001100");
		microInstrucoes[186] = new MicroInstrucao("cmp R3, R0 ", "00000000000000111010100", "00000000000000111010100", "00000000000000111010100");
		microInstrucoes[187] = new MicroInstrucao("cmp R3, Rdados ", "00000000000000111000100", "00000000000000111000100", "00000000000000111000100");
		microInstrucoes[188] = new MicroInstrucao("cmp R4, A ", "00000000000000111001110", "00000000000000111001110", "00000000000000111001110");
		microInstrucoes[189] = new MicroInstrucao("cmp R4, R0 ", "00000000000000111010110", "00000000000000111010110", "00000000000000111010110");
		microInstrucoes[190] = new MicroInstrucao("cmp R4, Rdados ", "00000000000000111000110", "00000000000000111000110", "00000000000000111000110");
	}
	
	public MicroInstrucao getMicroInstrucao(int pos) throws ExcecaoMemoriaControle{
		if (0 <= pos && pos < TOT_MICRO_INSTRUCOES){
			return microInstrucoes[pos];
		}
		
		throw new ExcecaoMemoriaControle("Endereco de microinstrução " + pos + " não reconhecido");		
	}

}
